/*函数节流*/
function throttle(fn, interval) {
    let enterTime = 0; //触发的时间
    let gapTime = interval || 300; //间隔时间，如果interval不传，则默认300ms
    return function () {
        let context = this;
        let backTime = new Date(); //第一次函数return即触发的时间
        if (backTime - enterTime > gapTime) {
            fn.call(context, arguments);
            enterTime = backTime; //赋值给第一次触发的时间，这样就保存了第二次触发的时间
        }
        wx.stopPullDownRefresh();
    };
}

/*函数防抖*/
function debounce(fn, interval) {
    var timer;
    var gapTime = interval || 1000; //间隔时间，如果interval不传，则默认1000ms
    return function () {
        clearTimeout(timer);
        var context = this;
        var args = arguments; //保存此处的arguments，因为setTimeout是全局的，arguments不是防抖函数需要的。
        timer = setTimeout(function () {
            fn.call(context, args);
        }, gapTime);
    };
}

/**
 * 生成 [min, max] 之间的随机整数（包含 min 和 max）
 * @param {number} min - 最小值
 * @param {number} max - 最大值
 * @returns {number} 随机整数
 */
function getRandomNum(min, max) {
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

/**
 * 将时间戳转换为日期时间字符串
 * @param {number} timestamp - 时间戳（10位或13位）
 * @returns {string} 格式：YYYY-MM-DD HH:mm:ss
 */
function timestampToDateTime(timestamp) {
    // 统一转为毫秒时间戳
    const date = new Date(timestamp.toString().length === 10 ? timestamp * 1000 : timestamp);

    // 补零函数
    const padZero = (num) => (num < 10 ? `0${num}` : num);

    // 提取各部分
    const year = date.getFullYear();
    const month = padZero(date.getMonth() + 1); // 月份从0开始
    const day = padZero(date.getDate());
    const hours = padZero(date.getHours());
    const minutes = padZero(date.getMinutes());
    const seconds = padZero(date.getSeconds());

    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}

export default {
    throttle,
    debounce,
	getRandomNum,
	timestampToDateTime
};
